﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Business.SMSMTWebService;
using System.Data;
using System.Xml;
namespace Business
{
    class SMSMTService
    {
        public static int SentMSM(DataTable dt, ref string[][] arrayGuidReturn, ref string message_return)
        {
            try
            {
                SMSWebService service = new SMSWebService();
                string strPublicKey = "<BitStrength>512</BitStrength><RSAKeyValue><Modulus>w15TIsT0r+4C/55ZZDQ1RB6/0usOLP6OkqEeTj6bHvd1DsZZ2sXRsSo4f2yeUSSck8H6XOkioZ7m0No2YxtwvQ==</Modulus><Exponent>AQAB</Exponent></RSAKeyValue>";
                int CooperateID = Settings.LocalSettings.CooperateID; //Mã đang cấp cho GSMART là 1

                //Tạo dữ cấu trúc dữ liệu cho DataSet
                DataSet ds = new DataSet();
                dt.TableName = "SMSOut";
                ds.Tables.Add(dt);
                string sTrans = Guid.NewGuid().ToString("N");
                //Chuyển DataSet thành XML
                XmlElement xml = Xml.Serialize(ds);

                string inputString;
                string bitStrengthString = strPublicKey.Substring(0, strPublicKey.IndexOf("</BitStrength>") + 14);
                strPublicKey = strPublicKey.Replace(bitStrengthString, "");
                int bitStrength = Convert.ToInt32(bitStrengthString.Replace("<BitStrength>", "").Replace("</BitStrength>", ""));
                inputString = xml.OuterXml;

                //Sinh MD5 cho chuỗi xml - Hàm SendEncryptSMSMessage sẽ giải mã chuỗi XML sau đó kiểm tra CheckSum xem nội dung có bị thay đổi không
                string checksum = Cryptography.getMd5Hash(inputString);
                //Mã hóa XML bằng PublicKey
                inputString = Cryptography.EncryptString(inputString, bitStrength, strPublicKey);

                //Gọi webservice gửi tin, tham số (true) cho phép tự động tách tin khi nội dung gửi quá 160 ký tự. Nếu đặt là (false) phần quá sẽ bị cắt

                //inputString = XMLCompression.Compress(inputString);
                service.Url = Settings.LocalSettings.WebserviceAddress;

                return service.SendEncryptMT(sTrans, CooperateID, inputString, checksum, ref arrayGuidReturn, ref message_return);
            }
            catch (Exception ex)
            {
                throw ex;
            }
        }
    }
}
